package com.stefanini.pe.bbva.bp.in.model;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.faces.bean.SessionScoped;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;

import com.pe.bbva.utils.Constantes;
import com.stefanini.pe.bbva.bp.in.dao.iface.CalculadoraModDAOIface;
import com.stefanini.pe.bbva.bp.in.to.FactorTipoCambio;
import com.stefanini.pe.bbva.bp.in.to.PosicionRebalanceoTO;
import com.stefanini.pe.bbva.bp.in.to.RebalanceoTO;
import com.stefanini.pe.bbva.bp.in.to.RepPropuestaPortafolio;
import com.stefanini.pe.bbva.bp.in.utils.Util;

@Controller(value="repPropuestaPortafolioModel")
@SessionScoped
public class RepPropuestaPortafolioModel {
	
	@Autowired
	@Qualifier("calculadoraModDAO")
	private CalculadoraModDAOIface calculadoraModDAOIface;
	
	private List<RepPropuestaPortafolio> listRepPropuestaPortafolio;
	private List<RepPropuestaPortafolio> listarCabeceraInicio;
	private List<RepPropuestaPortafolio> listarCuerpo;
	private List<RepPropuestaPortafolio> listarCabeceraFin;
	private List<RepPropuestaPortafolio> listarDetRecurso;
	private Map<String, String> mapaTotal;
	private List<RepPropuestaPortafolio> listarMonedasV;
	private List<RepPropuestaPortafolio> listarMonedasH;
	private Map<String, String> monedaTotal;
	private Map<String, String> distCatActivo;
	private List<RepPropuestaPortafolio> listarPorH;
	private List<RepPropuestaPortafolio> listarPorV;	
	private String monedaSeleccionada="";
	
	public RepPropuestaPortafolioModel() {
		listRepPropuestaPortafolio=new ArrayList<RepPropuestaPortafolio>();
		listarCabeceraInicio=new ArrayList<RepPropuestaPortafolio>();
		listarCuerpo=new ArrayList<RepPropuestaPortafolio>();
		listarCabeceraFin=new ArrayList<RepPropuestaPortafolio>();
		mapaTotal=new HashMap<String, String>();
		listarMonedasV=new ArrayList<RepPropuestaPortafolio>();
		listarMonedasH=new ArrayList<RepPropuestaPortafolio>();
		monedaTotal=new HashMap<String, String>();
		distCatActivo=new HashMap<String,String>();
		listarPorH=new ArrayList<RepPropuestaPortafolio>();
		listarPorV=new ArrayList<RepPropuestaPortafolio>();
	}

	public List<RepPropuestaPortafolio> getListRepPropuestaPortafolio() {
		return listRepPropuestaPortafolio;
	}

	public void setListRepPropuestaPortafolio(
			List<RepPropuestaPortafolio> listRepPropuestaPortafolio) {
		this.listRepPropuestaPortafolio = listRepPropuestaPortafolio;
	}

	public List getListarCabeceraInicio() {
		return listarCabeceraInicio;
	}

	public void setListarCabeceraInicio(List listarCabeceraInicio) {
		this.listarCabeceraInicio = listarCabeceraInicio;
	}

	public List getListarCuerpo() {
		return listarCuerpo;
	}

	public void setListarCuerpo(List listarCuerpo) {
		this.listarCuerpo = listarCuerpo;
	}

	public List getListarCabeceraFin() {
		return listarCabeceraFin;
	}

	public void setListarCabeceraFin(List listarCabeceraFin) {
		this.listarCabeceraFin = listarCabeceraFin;
	}
	
	public void procesarListaMoneda(List listPortafolioMonActual,List listPortafolioMonSuge,boolean tieneEuros){
		listarMonedasH=new ArrayList<RepPropuestaPortafolio>();
		listarMonedasV=new ArrayList<RepPropuestaPortafolio>();
		monedaTotal=new HashMap<String, String>();
		
		FactorTipoCambio ftc=calculadoraModDAOIface.ObtenerFactorTipoCambio();
		List<RepPropuestaPortafolio> listMoneda=new ArrayList<RepPropuestaPortafolio>();
			
		double totalActual= 0;
		double totalSugerida= 0;
		double totalActualPeso=0;
		double totalSugeridaPeso=0;
		double totalActualRentabilidad=0;
		double totalSugeridaRentabilidad=0;
		if(listPortafolioMonActual!=null){
			for(int i=0;i<listPortafolioMonActual.size();i++){
				
				PosicionRebalanceoTO rebaAct=(PosicionRebalanceoTO)listPortafolioMonActual.get(i);
				if(rebaAct.getMoneda().equals(Constantes.CONSTANTE_TIPO_MONEDA_PEN) || rebaAct.getMoneda().equals(Constantes.CONSTANTE_TIPO_MONEDA_USD)
						||(rebaAct.getMoneda().equals(Constantes.CONSTANTE_TIPO_MONEDA_EUR)&&tieneEuros)){
					BigDecimal sipenAct=Util.fixMultiply(ftc.factorTipoCambio(rebaAct.getMoneda(),this.getMonedaSeleccionada()), (rebaAct.getTotalInversion()));
					
					totalActual=totalActual+Util.isNumber(sipenAct.toString());
					totalActualPeso=totalActualPeso+Util.isNumber(rebaAct.getPeso());
					
					totalActualRentabilidad=totalActualRentabilidad+Util.isNumber(Util.fixMultiply(rebaAct.getRentabilidad(), rebaAct.getPeso()).divide(Util.big("100")));
					
					PosicionRebalanceoTO rebaSug=(PosicionRebalanceoTO)listPortafolioMonSuge.get(i);
					
					BigDecimal sipenSug=Util.fixMultiply(ftc.factorTipoCambio(rebaSug.getMoneda(),this.getMonedaSeleccionada()), (rebaSug.getTotalInversion()));
					
					totalSugerida=totalSugerida+Util.isNumber(sipenSug.toString());
					totalSugeridaPeso=totalSugeridaPeso+Util.isNumber(rebaSug.getPeso());
					totalSugeridaRentabilidad=totalSugeridaRentabilidad+Util.isNumber(Util.fixMultiply(rebaSug.getRentabilidad(), rebaSug.getPeso()).divide(Util.big("100")));
				}
			}
		
			RepPropuestaPortafolio repMoneda;
		
			for(int i=0;i<listPortafolioMonActual.size();i++){
				repMoneda=new RepPropuestaPortafolio();
				PosicionRebalanceoTO rebaActu=(PosicionRebalanceoTO)listPortafolioMonActual.get(i);
				if(rebaActu.getMoneda().equals(Constantes.CONSTANTE_TIPO_MONEDA_PEN) || rebaActu.getMoneda().equals(Constantes.CONSTANTE_TIPO_MONEDA_USD)||
						(rebaActu.getMoneda().equals(Constantes.CONSTANTE_TIPO_MONEDA_EUR)&&tieneEuros)){
					repMoneda.setMonedaAct(rebaActu.getMoneda());
					repMoneda.setTotalInversionAct(Util.formatDouble(Util.isNumber(rebaActu.getTotalInversion().toString())));
					
					repMoneda.setRentabilidadAct(Util.formatDouble(Util.isNumber(rebaActu.getRentabilidad().toString())));
					repMoneda.setRendimientoEstimadoAct(rebaActu.getRendimientoEstimado().toString());
					if(totalActual!=0 && Double.parseDouble(rebaActu.getTotalInversion().toString())!=0){
						BigDecimal sipenAct=Util.fixMultiply(ftc.factorTipoCambio(rebaActu.getMoneda(),this.getMonedaSeleccionada()), (rebaActu.getTotalInversion()));
						
						double valAux=Util.isNumber(sipenAct.toString());
						repMoneda.setPorcentajeAct(String.valueOf((valAux*100/totalActual)));
						repMoneda.setPesoAct(Util.formatDouble(Util.isNumber(repMoneda.getPorcentajeAct())));
						repMoneda.setPorcentajeAct(Util.formatDouble((valAux*100/totalActual)));
					}else{
						repMoneda.setPorcentajeAct("0.00");
						repMoneda.setPesoAct(Util.formatDouble(Util.isNumber(repMoneda.getPorcentajeAct())));
					}
	
					PosicionRebalanceoTO rebaSuge=(PosicionRebalanceoTO)listPortafolioMonSuge.get(i);
					repMoneda.setMonedaSug(rebaSuge.getMoneda());
					repMoneda.setTotalInversionSug(Util.formatDouble(Util.isNumber(rebaSuge.getTotalInversion().toString())));					
					repMoneda.setRentabilidadSug(Util.formatDouble(Util.isNumber(rebaSuge.getRentabilidad().toString())));
					repMoneda.setRendimientoEstimadoSug(rebaSuge.getRendimientoEstimado().toString());
					if(totalSugerida!=0 && Double.parseDouble(rebaSuge.getTotalInversion().toString())!= 0){
						BigDecimal sipenSuge=Util.fixMultiply(ftc.factorTipoCambio(rebaSuge.getMoneda(),this.getMonedaSeleccionada()), (rebaSuge.getTotalInversion()));						
						double valAux=Util.isNumber(sipenSuge.toString());
						repMoneda.setPorcentajeSug(String.valueOf((valAux*100/totalSugerida)));
						repMoneda.setPesoSug(Util.formatDouble(Util.isNumber(repMoneda.getPorcentajeSug())));
						repMoneda.setPorcentajeSug(Util.formatDouble((valAux*100/totalSugerida)));
					}else{
						repMoneda.setPorcentajeSug("0.00");
						repMoneda.setPesoSug(Util.formatDouble(Util.isNumber(repMoneda.getPorcentajeSug())));
					}
					listMoneda.add(repMoneda);				
				}
			}
			this.setListarMonedasV(listMoneda);
			monedaTotal.put("actualTot",Util.formatDouble(totalActual));
			monedaTotal.put("sugeTot",Util.formatDouble(totalSugerida));
			monedaTotal.put("totalActualPeso",Util.formatDouble(totalActualPeso));
			monedaTotal.put("totalSugeridaPeso",Util.formatDouble(totalSugeridaPeso));
			monedaTotal.put("totalActualRentabilidad",Util.formatDouble(totalActualRentabilidad));
			monedaTotal.put("totalSugeridaRentabilidad",Util.formatDouble(totalSugeridaRentabilidad));
		}	
	}
	
	public void procesarListaDistribucionCatActivo(List listDist, List listDetalleNuevosRecursos){
		listarPorH=new ArrayList<RepPropuestaPortafolio>();
		listarPorV=new ArrayList<RepPropuestaPortafolio>();
		distCatActivo=new HashMap<String,String>();
		
		FactorTipoCambio ftc=calculadoraModDAOIface.ObtenerFactorTipoCambio();
		Map<String,Object> objListDistriCatAct;
		double actualPen=0;
		double actualUsd=0;
		double actualEur=0;
		double sugePen=0;
		double sugeUsd=0;
		double sugeEur=0;
		
		double actualPenConv=0;
		double actualUsdConv=0;
		double actualEurConv=0;
		double sugePenConv=0;
		double sugeUsdConv=0;
		double sugeEurConv=0;
		double actualCaja=0;
		double actualRentaFija=0;
		double actualRentaVar=0;
		double sugeCaja=0;
		double sugeRentaFija=0;
		double sugeRentaVar=0;
		double actualTotalEurUsdPen=0;
		double sugeTotalEurUsdPen=0;
		
		double actualCajaV=0;
		double actualRentaFijaV=0;
		double actualRentaVarV=0;
		double sugeCajaV=0;
		double sugeRentaFijaV=0;
		double sugeRentaVarV=0;
		double actualTotalUsdPenV=0;
		double sugeTotalUsdPenV=0;
		
		for(int i=0;i< listDist.size();i++){
			objListDistriCatAct=new HashMap<String,Object>();
			objListDistriCatAct=(HashMap<String,Object>)listDist.get(i);			
			objListDistriCatAct.put("saldoactualpenmo",Util.big(String.valueOf(objListDistriCatAct.get("saldoactualpenmo"))).toString());
			objListDistriCatAct.put("saldoactualusdmo",Util.big(String.valueOf(objListDistriCatAct.get("saldoactualusdmo"))).toString());
			objListDistriCatAct.put("saldoactualeurmo",Util.big(String.valueOf(objListDistriCatAct.get("saldoactualeurmo"))).toString());			
			BigDecimal sipenActPen=new BigDecimal(0);		
			BigDecimal sipenActUsd=new BigDecimal(0);
			BigDecimal sipenActEur=new BigDecimal(0);			
			
		    //CORRECCION DE INCIDENCIA SOLO HASTA OPERACIONES DE REPORTE Y OPCINES
			if(i<=6){
				actualPen=actualPen+Util.isNumber(Util.nvl(objListDistriCatAct.get("saldoactualpenmo")).toString());
				sipenActPen=Util.fixMultiply(ftc.factorTipoCambio(Constantes.CONSTANTE_TIPO_MONEDA_PEN,this.getMonedaSeleccionada())
												, Util.big(Util.nvl(objListDistriCatAct.get("saldoactualpenmo")).toString()));
				actualPenConv=actualPenConv+Util.isNumber(sipenActPen.toString());
			}
											
			//CORRECCION DE INCIDENCIA SOLO HASTA OPERACIONES DE REPORTE Y OPCINES
			if(i<=6){
				actualUsd=actualUsd+Util.isNumber(Util.nvl(objListDistriCatAct.get("saldoactualusdmo")).toString());
				sipenActUsd=Util.fixMultiply(ftc.factorTipoCambio(Constantes.CONSTANTE_TIPO_MONEDA_USD,this.getMonedaSeleccionada())
												, Util.big(Util.nvl(objListDistriCatAct.get("saldoactualusdmo")).toString()));
				actualUsdConv=actualUsdConv+Util.isNumber(sipenActUsd.toString());
			}
				
			//CORRECCION DE INCIDENCIA SOLO HASTA OPERACIONES DE REPORTE Y OPCINES
			if(i<=6){
				actualEur=actualEur+Util.isNumber(Util.nvl(objListDistriCatAct.get("saldoactualeurmo")).toString());			
				sipenActEur=Util.fixMultiply(ftc.factorTipoCambio(Constantes.CONSTANTE_TIPO_MONEDA_EUR,this.getMonedaSeleccionada())
												, Util.big(Util.nvl(objListDistriCatAct.get("saldoactualeurmo")).toString()));
				actualEurConv=actualEurConv+Util.isNumber(sipenActEur.toString());
			}
			
			sugePen=sugePen+Util.isNumber((Util.nvl(objListDistriCatAct.get("montoSugeridopen")).toString()));			
			BigDecimal sipenSugePen=Util.fixMultiply(ftc.factorTipoCambio(Constantes.CONSTANTE_TIPO_MONEDA_PEN,this.getMonedaSeleccionada())
														, Util.big(Util.nvl(objListDistriCatAct.get("montoSugeridopen")).toString()));
			sugePenConv=sugePenConv+Util.isNumber(sipenSugePen.toString());
			
			sugeUsd=sugeUsd+Util.isNumber(Util.nvl(objListDistriCatAct.get("montoSugeridousd")).toString());			
			BigDecimal sipenSugeUsd=Util.fixMultiply(ftc.factorTipoCambio(Constantes.CONSTANTE_TIPO_MONEDA_USD,this.getMonedaSeleccionada())
														, Util.big(Util.nvl(objListDistriCatAct.get("montoSugeridousd")).toString()));
			sugeUsdConv=sugeUsdConv+Util.isNumber(sipenSugeUsd.toString());
			
			sugeEur=sugeEur+Util.isNumber(Util.nvl(objListDistriCatAct.get("montoSugeridoeur")).toString());			
			BigDecimal sipenSugeEur=Util.fixMultiply(ftc.factorTipoCambio(Constantes.CONSTANTE_TIPO_MONEDA_EUR,this.getMonedaSeleccionada())
														, Util.big(Util.nvl(objListDistriCatAct.get("montoSugeridoeur")).toString()));
			sugeEurConv=sugeEurConv+Util.isNumber(sipenSugeEur.toString());
			
			if(i==0){
				actualCaja=actualCaja+Util.isNumber(sipenActPen.toString())+Util.isNumber(sipenActUsd.toString())+Util.isNumber(sipenActEur.toString());	
				sugeCaja=sugeCaja+Util.isNumber(sipenSugePen.toString())+Util.isNumber(sipenSugeUsd.toString())+Util.isNumber(sipenSugeEur.toString());		
				
				actualCajaV=actualCajaV+Util.isNumber(sipenActPen.toString())+Util.isNumber(sipenActUsd.toString());	
				sugeCajaV=sugeCajaV+Util.isNumber(sipenSugePen.toString())+Util.isNumber(sipenSugeUsd.toString());		
			}
			
			if(i==1 || i==2 || i==3 || i==5 ){
				actualRentaFija=actualRentaFija+Util.isNumber(sipenActPen.toString())+Util.isNumber(sipenActUsd.toString())+Util.isNumber(sipenActEur.toString());	
				sugeRentaFija=sugeRentaFija+Util.isNumber(sipenSugePen.toString())+Util.isNumber(sipenSugeUsd.toString())+Util.isNumber(sipenSugeEur.toString());
				
				actualRentaFijaV=actualRentaFijaV+Util.isNumber(sipenActPen.toString())+Util.isNumber(sipenActUsd.toString());	
				sugeRentaFijaV=sugeRentaFijaV+Util.isNumber(sipenSugePen.toString())+Util.isNumber(sipenSugeUsd.toString());		
			}
			
			//CORRECCION DE INCIDENCIA SOLO HASTA OPERACIONES DE REPORTE Y OPCINES
		    if(i==4 || i==6){
				actualRentaVar=actualRentaVar+Util.isNumber(sipenActPen.toString())+Util.isNumber(sipenActUsd.toString())+Util.isNumber(sipenActEur.toString());	
				sugeRentaVar=sugeRentaVar+Util.isNumber(sipenSugePen.toString())+Util.isNumber(sipenSugeUsd.toString())+Util.isNumber(sipenSugeEur.toString());	
				
				actualRentaVarV=actualRentaVarV+Util.isNumber(sipenActPen.toString())+Util.isNumber(sipenActUsd.toString());	
				sugeRentaVarV=sugeRentaVarV+Util.isNumber(sipenSugePen.toString())+Util.isNumber(sipenSugeUsd.toString());		
			}
		}
		//CORRECCION DE INCIDENCIA SOLO HASTA OPERACIONES DE REPORTE Y OPCINES
        //Seagregara un for que incremente los nuevos recursos en Caja, RF, RV, 				
		BigDecimal oActualTotalUSD=new BigDecimal(0);
		BigDecimal oActualTotalPEN=new BigDecimal(0);
		BigDecimal oActualTotalEUR=new BigDecimal(0);		
		
		for(int i=0 ;i<listDetalleNuevosRecursos.size();i++){
			Map mapPadre=(HashMap)listDetalleNuevosRecursos.get(i);
			List<RebalanceoTO> listDetalle=(ArrayList<RebalanceoTO>)mapPadre.get("detalle");
			
			Integer iCodCatActivo=0;
			
			BigDecimal sipenActPen=new BigDecimal(0);
			BigDecimal sipenActUsd=new BigDecimal(0);
			BigDecimal sipenActEur=new BigDecimal(0);
			
			for(int j=0;j<listDetalle.size();j=j+3){
				RebalanceoTO rebaBuscar;
				for(int k=0;k<3;k++){
					rebaBuscar=new RebalanceoTO();
					rebaBuscar=listDetalle.get(j+k);
					iCodCatActivo=Integer.valueOf(rebaBuscar.getCodCatActivo());
					if(rebaBuscar.getMoneda().trim().equals(Constantes.CONSTANTE_TIPO_MONEDA_USD)){
						actualUsd=actualUsd+Util.isNumber(Util.nvl(rebaBuscar.getSaldoActual()));
						sipenActUsd=Util.fixMultiply(ftc.factorTipoCambio(Constantes.CONSTANTE_TIPO_MONEDA_USD,
								this.getMonedaSeleccionada()), Util.big(rebaBuscar.getSaldoActual()));
						actualUsdConv=actualUsdConv+Util.isNumber(sipenActUsd.toString());
					}else if(rebaBuscar.getMoneda().trim().equals(Constantes.CONSTANTE_TIPO_MONEDA_PEN)){
						actualPen=actualPen+Util.isNumber(Util.nvl(rebaBuscar.getSaldoActual()));
						sipenActPen=Util.fixMultiply(ftc.factorTipoCambio(Constantes.CONSTANTE_TIPO_MONEDA_PEN,
								this.getMonedaSeleccionada()), Util.big(rebaBuscar.getSaldoActual()));
						actualPenConv=actualPenConv+Util.isNumber(sipenActPen.toString());
					}else{
						actualEur=actualEur+Util.isNumber(Util.nvl(rebaBuscar.getSaldoActual()));		
						sipenActEur=Util.fixMultiply(ftc.factorTipoCambio(Constantes.CONSTANTE_TIPO_MONEDA_EUR,
								this.getMonedaSeleccionada()), Util.big(rebaBuscar.getSaldoActual()));
						actualEurConv=actualEurConv+Util.isNumber(sipenActEur.toString());
					}		
				}
			}
			
			if(iCodCatActivo == 1){
				actualCaja = actualCaja + 
							 Util.isNumber(sipenActPen.toString()) + 
						 	 Util.isNumber(sipenActUsd.toString()) + 
							 Util.isNumber(sipenActEur.toString());	
				
				actualCajaV = actualCajaV + 
							  Util.isNumber(sipenActPen.toString()) + 
							  Util.isNumber(sipenActUsd.toString());
			}
		    if(iCodCatActivo==2 || iCodCatActivo==3 || iCodCatActivo==4 || iCodCatActivo==6){
				actualRentaFija = actualRentaFija + 
								  Util.isNumber(sipenActPen.toString()) + 
								  Util.isNumber(sipenActUsd.toString()) + 
								  Util.isNumber(sipenActEur.toString());
				
				actualRentaFijaV = actualRentaFijaV + 
				                   Util.isNumber(sipenActPen.toString()) + 
				                   Util.isNumber(sipenActUsd.toString());	
			}
		    if(iCodCatActivo==5 || iCodCatActivo==7){
				actualRentaVar = actualRentaVar +
								 Util.isNumber(sipenActPen.toString()) + 
								 Util.isNumber(sipenActUsd.toString()) + 
								 Util.isNumber(sipenActEur.toString());
				
				actualRentaVarV = actualRentaVarV + 
								  Util.isNumber(sipenActPen.toString()) + 
								  Util.isNumber(sipenActUsd.toString());	
			}			
		}		
		//***************************************************************
		actualTotalEurUsdPen=actualPenConv+actualUsdConv+actualEurConv;
		sugeTotalEurUsdPen=sugePenConv+sugeUsdConv+sugeEurConv;
		
		actualTotalUsdPenV=actualPenConv+actualUsdConv;
		sugeTotalUsdPenV=sugePenConv+sugeUsdConv;
		
		RepPropuestaPortafolio repCajaH=new RepPropuestaPortafolio();
		repCajaH.setDescripcion("Caja");
		RepPropuestaPortafolio repRentaFijaH=new RepPropuestaPortafolio();
		repRentaFijaH.setDescripcion("Renta Fija");
		RepPropuestaPortafolio repRentaVarH=new RepPropuestaPortafolio();
		repRentaVarH.setDescripcion("Renta Variable");

		if(actualTotalEurUsdPen!=0){
			repCajaH.setPorcentajeAct(actualCaja!=0?(Util.formatDouble(actualCaja*100/actualTotalEurUsdPen)):"0");
			repRentaFijaH.setPorcentajeAct(actualRentaFija!=0?(Util.formatDouble(actualRentaFija*100/actualTotalEurUsdPen)):"0");
			repRentaVarH.setPorcentajeAct(actualRentaVar!=0?(Util.formatDouble(actualRentaVar*100/actualTotalEurUsdPen)):"0");
		}else{
			repCajaH.setPorcentajeAct("0.00");
			repRentaFijaH.setPorcentajeAct("0.00");
			repRentaVarH.setPorcentajeAct("0.00");	
		}
		if(sugeTotalEurUsdPen!=0){
			repCajaH.setPorcentajeSug(sugeCaja!=0?(Util.formatDouble(sugeCaja*100/sugeTotalEurUsdPen)):"0");
			repRentaFijaH.setPorcentajeSug(sugeRentaFija!=0?(Util.formatDouble(sugeRentaFija*100/sugeTotalEurUsdPen)):"0");
			repRentaVarH.setPorcentajeSug(sugeRentaVar!=0?(Util.formatDouble(sugeRentaVar*100/sugeTotalEurUsdPen)):"0");
		}else{
			repCajaH.setPorcentajeSug("0.00");
			repRentaFijaH.setPorcentajeSug("0.00");
			repRentaVarH.setPorcentajeSug("0.00");	
		}
		
		listarPorH.add(repCajaH);
		listarPorH.add(repRentaFijaH);
		listarPorH.add(repRentaVarH);
		
		RepPropuestaPortafolio repCajaV=new RepPropuestaPortafolio();
		repCajaV.setDescripcion("Caja");
		RepPropuestaPortafolio repRentaFijaV=new RepPropuestaPortafolio();
		repRentaFijaV.setDescripcion("Renta Fija");
		RepPropuestaPortafolio repRentaVarV=new RepPropuestaPortafolio();
		repRentaVarV.setDescripcion("Renta Variable");

		if(actualTotalUsdPenV!=0){
			repCajaV.setPorcentajeAct(actualCajaV!=0?(Util.formatDouble(actualCajaV*100/actualTotalUsdPenV)):"0");
			repRentaFijaV.setPorcentajeAct(actualRentaFijaV!=0?(Util.formatDouble(actualRentaFijaV*100/actualTotalUsdPenV)):"0");
			repRentaVarV.setPorcentajeAct(actualRentaVarV!=0?(Util.formatDouble(actualRentaVarV*100/actualTotalUsdPenV)):"0");
		}else{
			repCajaV.setPorcentajeAct("0.00");
			repRentaFijaV.setPorcentajeAct("0.00");
			repRentaVarV.setPorcentajeAct("0.00");	
		}
		if(sugeTotalUsdPenV!=0){
			repCajaV.setPorcentajeSug(sugeCajaV!=0?(Util.formatDouble(sugeCajaV*100/sugeTotalUsdPenV)):"0");
			repRentaFijaV.setPorcentajeSug(sugeRentaFijaV!=0?(Util.formatDouble(sugeRentaFijaV*100/sugeTotalUsdPenV)):"0");
			repRentaVarV.setPorcentajeSug(sugeRentaVarV!=0?(Util.formatDouble(sugeRentaVarV*100/sugeTotalUsdPenV)):"0");
		}else{
			repCajaV.setPorcentajeSug("0.00");
			repRentaFijaV.setPorcentajeSug("0.00");
			repRentaVarV.setPorcentajeSug("0.00");	
		}
		
		listarPorV.add(repCajaV);
		listarPorV.add(repRentaFijaV);
		listarPorV.add(repRentaVarV);		
		
		distCatActivo.put("disCatActualPen",Util.formatDouble(actualPen));
		distCatActivo.put("disCatActualUsd", Util.formatDouble(actualUsd));
		distCatActivo.put("disCatActualEur",Util.formatDouble(actualEur));
		distCatActivo.put("disCatSugePen", Util.formatDouble(sugePen));
		distCatActivo.put("disCatSugeUsd", Util.formatDouble(sugeUsd));
		distCatActivo.put("disCatSugeEur", Util.formatDouble(sugeEur));
		distCatActivo.put("disCatActualPenConv", Util.formatDouble(actualPenConv));
		distCatActivo.put("disCatActualUsdConv", Util.formatDouble(actualUsdConv));
		distCatActivo.put("disCatActualEurConv", Util.formatDouble(actualEurConv));
		distCatActivo.put("disCatSugePenConv", Util.formatDouble(sugePenConv));
		distCatActivo.put("disCatSugeUsdConv", Util.formatDouble(sugeUsdConv));
		distCatActivo.put("disCatSugeEurConv", Util.formatDouble(sugeEurConv));
	}
		
	public void procesarListaMonedaH(List listPortafolioMonActual,List listPortafolioMonSuge){
		listarMonedasH=new ArrayList<RepPropuestaPortafolio>();
		listarMonedasV=new ArrayList<RepPropuestaPortafolio>();
		monedaTotal=new HashMap<String, String>();
		
		FactorTipoCambio ftc=calculadoraModDAOIface.ObtenerFactorTipoCambio();
		List<RepPropuestaPortafolio> listMoneda=new ArrayList<RepPropuestaPortafolio>();
	
		double totalActual= 0;
		double totalSugerida= 0;
		double totalActualPeso=0;
		double totalSugeridaPeso=0;
		double totalActualRentabilidad=0;
		double totalSugeridaRentabilidad=0;
		
		for(int i=0;i<listPortafolioMonActual.size();i++){
			PosicionRebalanceoTO rebaAct=(PosicionRebalanceoTO)listPortafolioMonActual.get(i);
			BigDecimal sipenAct=Util.fixMultiply(ftc.factorTipoCambio(rebaAct.getMoneda(),this.getMonedaSeleccionada()), (rebaAct.getTotalInversion()));
			totalActual=totalActual+Util.isNumber(sipenAct.toString());
			totalActualPeso=totalActualPeso+Util.isNumber(rebaAct.getPeso());
			totalActualRentabilidad=totalActualRentabilidad+Util.isNumber(rebaAct.getRentabilidad());
			PosicionRebalanceoTO rebaSug=(PosicionRebalanceoTO)listPortafolioMonSuge.get(i);
			BigDecimal sipenSug=Util.fixMultiply(ftc.factorTipoCambio(rebaSug.getMoneda(),this.getMonedaSeleccionada()), (rebaSug.getTotalInversion()));
			totalSugerida=totalSugerida+Util.isNumber(sipenSug.toString());
			totalSugeridaPeso=totalSugeridaPeso+Util.isNumber(rebaSug.getPeso());
			totalSugeridaRentabilidad=totalSugeridaRentabilidad+Util.isNumber(rebaSug.getRentabilidad());
		}
		
		RepPropuestaPortafolio repMoneda;
		for(int i=0;i<listPortafolioMonActual.size();i++){
			repMoneda=new RepPropuestaPortafolio();
			PosicionRebalanceoTO rebaActu=(PosicionRebalanceoTO)listPortafolioMonActual.get(i);
			repMoneda.setMonedaAct(rebaActu.getMoneda());
			repMoneda.setTotalInversionAct(Util.formatDouble(Util.isNumber(rebaActu.getTotalInversion().toString())));				
			repMoneda.setRentabilidadAct(Util.formatDouble(Util.isNumber(rebaActu.getRentabilidad().toString())));
			repMoneda.setRendimientoEstimadoAct(rebaActu.getRendimientoEstimado().toString());
			if(totalActual!=0 && Double.parseDouble(rebaActu.getTotalInversion().toString())!=0){
				BigDecimal sipenAct=Util.fixMultiply(ftc.factorTipoCambio(rebaActu.getMoneda(),this.getMonedaSeleccionada()), (rebaActu.getTotalInversion()));					
				double valAux=Util.isNumber(sipenAct.toString());
				repMoneda.setPorcentajeAct(String.valueOf((valAux*100/totalActual)));
				repMoneda.setPesoAct(Util.formatDouble(Util.isNumber(repMoneda.getPorcentajeAct())));
			}else{
				repMoneda.setPorcentajeAct("0.00");
				repMoneda.setPesoAct(Util.formatDouble(Util.isNumber(repMoneda.getPorcentajeAct())));
			}

			PosicionRebalanceoTO rebaSuge=(PosicionRebalanceoTO)listPortafolioMonSuge.get(i);
			repMoneda.setMonedaSug(rebaSuge.getMoneda());
			repMoneda.setTotalInversionSug(Util.formatDouble(Util.isNumber(rebaSuge.getTotalInversion().toString())));
			
			repMoneda.setRentabilidadSug(Util.formatDouble(Util.isNumber(rebaSuge.getRentabilidad().toString())));
			repMoneda.setRendimientoEstimadoSug(rebaSuge.getRendimientoEstimado().toString());
			if(totalSugerida!=0 && Double.parseDouble(rebaSuge.getTotalInversion().toString())!= 0){
				BigDecimal sipenSuge=Util.fixMultiply(ftc.factorTipoCambio(rebaSuge.getMoneda(),this.getMonedaSeleccionada()), (rebaSuge.getTotalInversion()));
				double valAux=Util.isNumber(sipenSuge.toString());
				repMoneda.setPorcentajeSug(String.valueOf((valAux*100/totalSugerida)));
				repMoneda.setPesoSug(Util.formatDouble(Util.isNumber(repMoneda.getPorcentajeSug())));
			}else{
				repMoneda.setPorcentajeSug("0.00");
				repMoneda.setPesoSug(Util.formatDouble(Util.isNumber(repMoneda.getPorcentajeSug())));
			}
			listMoneda.add(repMoneda);
		}						
		this.setListarMonedasV(listMoneda);
		monedaTotal.put("actualTot",Util.formatDouble(totalActual));
		monedaTotal.put("sugeTot",Util.formatDouble(totalSugerida));
		monedaTotal.put("totalActualPeso",Util.formatDouble(totalActualPeso));
		monedaTotal.put("totalSugeridaPeso",Util.formatDouble(totalSugeridaPeso));
		monedaTotal.put("totalActualRentabilidad",Util.formatDouble(totalActualRentabilidad));
		monedaTotal.put("totalSugeridaRentabilidad",Util.formatDouble(totalSugeridaRentabilidad));						
	}	
	
	public void procesarListaSubRep1(List<Map<String, Object>> listDetDistProd,List<Map<String, Object>> listDetDistProdRec){
		listRepPropuestaPortafolio=new ArrayList<RepPropuestaPortafolio>();
		listarCabeceraInicio=new ArrayList<RepPropuestaPortafolio>();
		listarCuerpo=new ArrayList<RepPropuestaPortafolio>();
		listarCabeceraFin=new ArrayList<RepPropuestaPortafolio>();
		mapaTotal=new HashMap<String, String>();
		List<RepPropuestaPortafolio> listDetallDist=new ArrayList<RepPropuestaPortafolio>();
		List<RepPropuestaPortafolio> listDetallRecur=new ArrayList<RepPropuestaPortafolio>();
		
		RepPropuestaPortafolio repAux=new RepPropuestaPortafolio();
		boolean isFM=false;
		
		//**CALCULAR TOTALES POR MONEDA
		BigDecimal oActualTotalUSD=new BigDecimal(0);
		BigDecimal oActualTotalPEN=new BigDecimal(0);
		BigDecimal oActualTotalEUR=new BigDecimal(0);		
		BigDecimal oSugeridoTotalUSD=new BigDecimal(0);
		BigDecimal oSugeridoTotalPEN=new BigDecimal(0);
		BigDecimal oSugeridoTotalEUR=new BigDecimal(0);
		
		for(Map<String, Object> subLista:listDetDistProd){
			List<RebalanceoTO> listaDetalle=(List<RebalanceoTO>)subLista.get("detalle");
			isFM=false;
			repAux=new RepPropuestaPortafolio();
			for(RebalanceoTO filaSubLista:listaDetalle){
				if(!filaSubLista.getCodCatProd().equals("3")){
					if(filaSubLista.getMoneda().equals(Constantes.CONSTANTE_TIPO_MONEDA_EUR)){
						oActualTotalEUR=oActualTotalEUR.add(Util.big(filaSubLista.getSaldoActual()));
						oSugeridoTotalEUR = oSugeridoTotalEUR.add(filaSubLista.getSaldoResultante());
						
					}else if(filaSubLista.getMoneda().equals(Constantes.CONSTANTE_TIPO_MONEDA_USD)){
						oActualTotalUSD =oActualTotalUSD.add(Util.big(filaSubLista.getSaldoActual()));
						oSugeridoTotalUSD =oSugeridoTotalUSD.add(filaSubLista.getSaldoResultante());
						
					}else if(filaSubLista.getMoneda().equals(Constantes.CONSTANTE_TIPO_MONEDA_PEN)){
						oActualTotalPEN=oActualTotalPEN.add(Util.big(filaSubLista.getSaldoActual()));
						oSugeridoTotalPEN=oSugeridoTotalPEN.add(filaSubLista.getSaldoResultante());
					}
				}else{
					if(filaSubLista.getMoneda().equals(Constantes.CONSTANTE_TIPO_MONEDA_EUR)){
						oActualTotalEUR=oActualTotalEUR.add(Util.big(String.valueOf(repAux.getActuEurDec())).add(Util.big(filaSubLista.getSaldoActual())));
						oSugeridoTotalEUR = oSugeridoTotalEUR.add(Util.big(String.valueOf(repAux.getSugeEurDec())).add(filaSubLista.getSaldoResultante()));						
						
					}else if(filaSubLista.getMoneda().equals(Constantes.CONSTANTE_TIPO_MONEDA_USD)){
						oActualTotalUSD =oActualTotalUSD.add(Util.big(String.valueOf(repAux.getActuUsdDec())).add(Util.big(filaSubLista.getSaldoActual())));
						oSugeridoTotalUSD =oSugeridoTotalUSD.add(Util.big(String.valueOf(repAux.getSugeUsdDec())).add(filaSubLista.getSaldoResultante()));						
					
					}else if(filaSubLista.getMoneda().equals(Constantes.CONSTANTE_TIPO_MONEDA_PEN)){
						oActualTotalPEN=oActualTotalPEN.add(Util.big(String.valueOf(repAux.getActuPenDec())).add(Util.big(filaSubLista.getSaldoActual())));
						oSugeridoTotalPEN=oSugeridoTotalPEN.add(Util.big(String.valueOf(repAux.getSugePenDec())).add(filaSubLista.getSaldoResultante()));						
					}
				}
			}
		}		
		for(int i=0 ;i<listDetDistProdRec.size();i++){
			Map mapPadre=(HashMap)listDetDistProdRec.get(i);
			List<RebalanceoTO> listDetalle=(ArrayList<RebalanceoTO>)mapPadre.get("detalle");			
			for(int j=0;j<listDetalle.size();j=j+3){
				RebalanceoTO rebaBuscar;
				for(int k=0;k<3;k++){
					rebaBuscar=new RebalanceoTO();
					rebaBuscar=listDetalle.get(j+k);
					if(rebaBuscar.getMoneda().trim().equals(Constantes.CONSTANTE_TIPO_MONEDA_USD)){
						oActualTotalUSD =oActualTotalUSD.add(Util.big(rebaBuscar.getSaldoActual()));
					}else if(rebaBuscar.getMoneda().trim().equals(Constantes.CONSTANTE_TIPO_MONEDA_PEN)){
						oActualTotalPEN=oActualTotalPEN.add(Util.big(rebaBuscar.getSaldoActual()));						
					}else{
						oActualTotalEUR=oActualTotalEUR.add(Util.big(rebaBuscar.getSaldoActual()));
					}					
				}
			}			
		}		
		
		//System.out.println("********-------MONTOS Y PESOS POR MONEDAS");
		for(Map<String, Object> subLista:listDetDistProd){
			List<RebalanceoTO> listaDetalle=(List<RebalanceoTO>)subLista.get("detalle");
			isFM=false;
			repAux=new RepPropuestaPortafolio();
			BigDecimal montoActXRentPEN = new BigDecimal(0);
			BigDecimal montoActXRentEUR = new BigDecimal(0);
			BigDecimal montoActXRentUSD = new BigDecimal(0);
			BigDecimal montoSugXRentPEN = new BigDecimal(0);
			BigDecimal montoSugXRentEUR = new BigDecimal(0);
			BigDecimal montoSugXRentUSD = new BigDecimal(0);
			
			int codProdCat = 0;
			for(RebalanceoTO filaSubLista:listaDetalle){				
				if(!filaSubLista.getCodCatProd().equals("2") && !filaSubLista.getCodCatProd().equals("3") && !filaSubLista.getCodCatProd().equals("5")){
					if(filaSubLista.getMoneda().equals(Constantes.CONSTANTE_TIPO_MONEDA_EUR)){
						repAux.setActuEurDec(Util.big(filaSubLista.getSaldoActual()).doubleValue());
						try{
							repAux.setActuEurPesoDec(Util.big(filaSubLista.getSaldoActual()).divide(oActualTotalEUR,2,RoundingMode.HALF_UP).doubleValue());				
						}catch(ArithmeticException e){
							repAux.setActuEurPesoDec(0);
						}
						repAux.setActuEurRentabDec(Util.big(filaSubLista.getRentabilidad()).doubleValue());
						repAux.setSugeEurDec(filaSubLista.getSaldoResultante().doubleValue());
						repAux.setSugeEurPesoDec(filaSubLista.getPesoFamilia().doubleValue());
						
						try{
							repAux.setSugeEurPesoDec(filaSubLista.getSaldoResultante().divide(oSugeridoTotalEUR,2,RoundingMode.HALF_UP).doubleValue());						
						}catch(ArithmeticException e){
							repAux.setSugeEurPesoDec(0);
						}
						repAux.setSugeEurRentabDec(Util.big(filaSubLista.getRentabilidadEstimada()).doubleValue());
					}else if(filaSubLista.getMoneda().equals(Constantes.CONSTANTE_TIPO_MONEDA_USD)){
						repAux.setActuUsdDec(Util.big(filaSubLista.getSaldoActual()).doubleValue());
						try{
							repAux.setActuUsdPesoDec(Util.big(filaSubLista.getSaldoActual()).divide(oActualTotalUSD,2,RoundingMode.HALF_UP).doubleValue());							
						}catch(ArithmeticException e){
							repAux.setActuUsdPesoDec(0);
						}
						repAux.setActuUsdRentabDec(Util.big(filaSubLista.getRentabilidad()).doubleValue());
						repAux.setSugeUsdDec(filaSubLista.getSaldoResultante().doubleValue());					
						try{
							repAux.setSugeUsdPesoDec(filaSubLista.getSaldoResultante().divide(oSugeridoTotalUSD,2,RoundingMode.HALF_UP).doubleValue());							
						}catch(ArithmeticException e){
							repAux.setSugeUsdPesoDec(0);
						}
						repAux.setSugeUsdRentabDec(Util.big(filaSubLista.getRentabilidadEstimada()).doubleValue());
						
					}else if(filaSubLista.getMoneda().equals(Constantes.CONSTANTE_TIPO_MONEDA_PEN)){
						repAux.setActuPenDec(Util.big(filaSubLista.getSaldoActual()).doubleValue());
						try{
							repAux.setActuPenPesoDec(Util.big(filaSubLista.getSaldoActual()).divide(oActualTotalPEN,2,RoundingMode.HALF_UP).doubleValue());								
						}catch(ArithmeticException e){
							repAux.setActuPenPesoDec(0);
						}
						repAux.setActuPenRentabDec(Util.big(filaSubLista.getRentabilidad()).doubleValue());
						repAux.setSugePenDec(filaSubLista.getSaldoResultante().doubleValue());
						
						try{
							repAux.setSugePenPesoDec(filaSubLista.getSaldoResultante().divide(oSugeridoTotalPEN,2,RoundingMode.HALF_UP).doubleValue());								
						}catch(ArithmeticException e){
							repAux.setSugePenPesoDec(0);
						}
						repAux.setSugePenRentabDec(Util.big(filaSubLista.getRentabilidadEstimada()).doubleValue());
					}
					repAux.setCodReporte(Integer.valueOf(filaSubLista.getCodCatProd())-1);
					repAux.setDescPadre(filaSubLista.getDescripcion());
					if(filaSubLista.getCodCatProd().equals("4")){						
						if(Util.big(filaSubLista.getSaldoActual()).intValue()!=0||filaSubLista.getSaldoResultante().intValue()!=0){
							repAux.setDescPadre("FONDOS MUTUOS");
							repAux.setDescripcion(filaSubLista.getDescripcion());
							listDetallDist.add(repAux);
							repAux=new RepPropuestaPortafolio();							
						}	
						isFM=true;
					}
				}else{//caso: {BONOS Y PAPELES COMERCIALES, CodCatProd: 5}, {DEPOSITO ESTRUCTURADOS, CodCatProd: 3}, {DEPOSITO A PLAZO, CodCatProd: 2}
					codProdCat = Integer.parseInt(filaSubLista.getCodCatProd());
					if(filaSubLista.getMoneda().equals(Constantes.CONSTANTE_TIPO_MONEDA_EUR)){
						if(codProdCat!=2 && codProdCat!=3 && codProdCat!=5){
							repAux.setActuEurRentabDec(Util.big(String.valueOf(repAux.getActuEurRentabDec())).add(Util.big(filaSubLista.getRentabilidad())).doubleValue());
							repAux.setSugeEurRentabDec(Util.big(String.valueOf(repAux.getSugeEurRentabDec())).add(Util.big(filaSubLista.getRentabilidadEstimada())).doubleValue());
						}else{
							montoActXRentEUR = Util.addBigDecimal(montoActXRentEUR, Util.fixMultiply(Util.big(filaSubLista.getSaldoActual()), Util.big(filaSubLista.getRentabilidad())));
							montoSugXRentEUR = Util.addBigDecimal(montoSugXRentEUR, Util.fixMultiply(filaSubLista.getSaldoResultante(), Util.big(filaSubLista.getRentabilidadEstimada())));
						}
						
						repAux.setActuEurDec(Util.big(String.valueOf(repAux.getActuEurDec())).add(Util.big(filaSubLista.getSaldoActual())).doubleValue());
						try{
							repAux.setActuEurPesoDec(Util.big(String.valueOf(repAux.getActuEurPesoDec())).add(Util.big(filaSubLista.getSaldoActual()).divide(oActualTotalEUR,2,RoundingMode.HALF_UP)).doubleValue());							
						}catch(ArithmeticException e){
							repAux.setActuEurPesoDec(0);
						}
						repAux.setSugeEurDec(Util.big(String.valueOf(repAux.getSugeEurDec())).add(filaSubLista.getSaldoResultante()).doubleValue());
						try{
							repAux.setSugeEurPesoDec(Util.big(String.valueOf(repAux.getSugeEurPesoDec())).add(filaSubLista.getSaldoResultante().divide(oSugeridoTotalEUR,2,RoundingMode.HALF_UP)).doubleValue());							
						}catch(ArithmeticException e){
							repAux.setSugeEurPesoDec(0);
						}
					}else if(filaSubLista.getMoneda().equals(Constantes.CONSTANTE_TIPO_MONEDA_USD)){
						if(codProdCat!=2 && codProdCat!=3 && codProdCat!=5){
							repAux.setActuUsdRentabDec(Util.big(String.valueOf(repAux.getActuUsdRentabDec())).add(Util.big(filaSubLista.getRentabilidad())).doubleValue());
							repAux.setSugeUsdRentabDec(Util.big(String.valueOf(repAux.getSugeUsdRentabDec())).add(Util.big(filaSubLista.getRentabilidadEstimada())).doubleValue());
						}else{
							montoActXRentUSD = Util.addBigDecimal(montoActXRentUSD, Util.fixMultiply(Util.big(filaSubLista.getSaldoActual()), Util.big(filaSubLista.getRentabilidad())));
							montoSugXRentUSD = Util.addBigDecimal(montoSugXRentUSD, Util.fixMultiply(filaSubLista.getSaldoResultante(), Util.big(filaSubLista.getRentabilidadEstimada())));
						}
						
						repAux.setActuUsdDec(Util.big(String.valueOf(repAux.getActuUsdDec())).add(Util.big(filaSubLista.getSaldoActual())).doubleValue());
						try{
							repAux.setActuUsdPesoDec(Util.big(String.valueOf(repAux.getActuUsdPesoDec())).add(Util.big(filaSubLista.getSaldoActual()).divide(oActualTotalUSD,2,RoundingMode.HALF_UP)).doubleValue());
						}catch(ArithmeticException e){
							repAux.setActuUsdPesoDec(0);
						}
						repAux.setSugeUsdDec(Util.big(String.valueOf(repAux.getSugeUsdDec())).add(filaSubLista.getSaldoResultante()).doubleValue());
						try{
							repAux.setSugeUsdPesoDec(Util.big(String.valueOf(repAux.getSugeUsdPesoDec())).add(filaSubLista.getSaldoResultante().divide(oSugeridoTotalUSD,2,RoundingMode.HALF_UP)).doubleValue());
						}catch(ArithmeticException e){
							repAux.setSugeUsdPesoDec(0);
						}
					}else if(filaSubLista.getMoneda().equals(Constantes.CONSTANTE_TIPO_MONEDA_PEN)){
						if(codProdCat!=2 && codProdCat!=3 && codProdCat!=5){
							repAux.setActuPenRentabDec(Util.big(String.valueOf(repAux.getActuPenRentabDec())).add(Util.big(filaSubLista.getRentabilidad())).doubleValue());
							repAux.setSugePenRentabDec(Util.big(String.valueOf(repAux.getSugePenRentabDec())).add(Util.big(filaSubLista.getRentabilidadEstimada())).doubleValue());
						}else{
							montoActXRentPEN = Util.addBigDecimal(montoActXRentPEN, Util.fixMultiply(Util.big(filaSubLista.getSaldoActual()), Util.big(filaSubLista.getRentabilidad())));
							montoSugXRentPEN = Util.addBigDecimal(montoSugXRentPEN, Util.fixMultiply(filaSubLista.getSaldoResultante(), Util.big(filaSubLista.getRentabilidadEstimada())));
						}
						
						repAux.setActuPenDec(Util.big(String.valueOf(repAux.getActuPenDec())).add(Util.big(filaSubLista.getSaldoActual())).doubleValue());
						try{
							repAux.setActuPenPesoDec(Util.big(String.valueOf(repAux.getActuPenPesoDec())).add(Util.big(filaSubLista.getSaldoActual()).divide(oActualTotalPEN,2,RoundingMode.HALF_UP)).doubleValue());
						}catch(ArithmeticException e){
							repAux.setActuPenPesoDec(0);
						}
						repAux.setSugePenDec(Util.big(String.valueOf(repAux.getSugePenDec())).add(filaSubLista.getSaldoResultante()).doubleValue());
						try{
							repAux.setSugePenPesoDec(Util.big(String.valueOf(repAux.getSugePenPesoDec())).add(filaSubLista.getSaldoResultante().divide(oSugeridoTotalPEN,2,RoundingMode.HALF_UP)).doubleValue());
						}catch(ArithmeticException e){
							repAux.setSugePenPesoDec(0);
						}						
					}
					if(filaSubLista.getCodCatProd().equals("3")){
						repAux.setCodReporte(2);
						repAux.setDescPadre("DEPOSITO ESTRUCTURADO");
					}else{// AGREGADO
						repAux.setCodReporte(Integer.valueOf(filaSubLista.getCodCatProd())-1);
						repAux.setDescPadre(filaSubLista.getDescripcion());
					}
				}
			}
			
			if(codProdCat==2 || codProdCat==3 || codProdCat==5){
				repAux.setActuEurRentabDec(repAux.getActuEurDec()==0 ? 0 : montoActXRentEUR.doubleValue()/repAux.getActuEurDec());
				repAux.setActuUsdRentabDec(repAux.getActuUsdDec()==0 ? 0 : montoActXRentUSD.doubleValue()/repAux.getActuUsdDec());
				repAux.setActuPenRentabDec(repAux.getActuPenDec()==0 ? 0 : montoActXRentPEN.doubleValue()/repAux.getActuPenDec());
				
				repAux.setSugeEurRentabDec(repAux.getSugeEurDec()==0 ? 0 : montoSugXRentEUR.doubleValue()/repAux.getSugeEurDec());
				repAux.setSugeUsdRentabDec(repAux.getSugeUsdDec()==0 ? 0 : montoSugXRentUSD.doubleValue()/repAux.getSugeUsdDec());
				repAux.setSugePenRentabDec(repAux.getSugePenDec()==0 ? 0 : montoSugXRentPEN.doubleValue()/repAux.getSugePenDec());
			}
			
			if(!isFM){
				listDetallDist.add(repAux);
			}
		}

		for(int i=0 ;i<listDetDistProdRec.size();i++){
			Map mapPadre=(HashMap)listDetDistProdRec.get(i);
			List<RebalanceoTO> listDetalle=(ArrayList<RebalanceoTO>)mapPadre.get("detalle");
			RebalanceoTO rebPadre=(RebalanceoTO)mapPadre.get("pie");
			repAux=new RepPropuestaPortafolio();
			
			for(int j=0;j<listDetalle.size();j=j+3){
			repAux.setDescPadre(Util.isString(listDetalle.get(j).getDescripcion()));
			repAux.setCodReporte(i);
			
			repAux.setDescripcion(Util.isString(listDetalle.get(j).getDescripcion()));
			
			RebalanceoTO rebaBuscar;
			for(int k=0;k<3;k++){
				rebaBuscar=new RebalanceoTO();
				rebaBuscar=listDetalle.get(j+k);
				if(rebaBuscar.getMoneda().trim().equals(Constantes.CONSTANTE_TIPO_MONEDA_USD)){
					repAux=actualizaUsdRec(rebaBuscar,repAux,oActualTotalUSD);
				}else if(rebaBuscar.getMoneda().trim().equals(Constantes.CONSTANTE_TIPO_MONEDA_PEN)){
					repAux=actualizaPenRec(rebaBuscar,repAux,oActualTotalPEN);
				}else{
					repAux=actualizaEurRec(rebaBuscar,repAux,oActualTotalEUR);
				}
			}			
			listDetallRecur.add(repAux);
			repAux=new RepPropuestaPortafolio();
			}			
		}		
		this.obtenerList(listDetallDist, listDetallRecur);
		this.obtenerSumaTotal(listDetallDist, listDetallRecur);
	}
	
	public RepPropuestaPortafolio actualizaUsdRec(RebalanceoTO rebaUsd,RepPropuestaPortafolio repAux, BigDecimal oTotalUSD){
		repAux.setActuUsdDec(Util.isNumber(rebaUsd.getSaldoActual()));
		try{
			repAux.setActuUsdPesoDec(Util.big(rebaUsd.getSaldoActual()).divide(oTotalUSD,2,RoundingMode.HALF_UP).doubleValue());
		}catch(ArithmeticException e){
			repAux.setActuUsdPesoDec(0);
		}
		return repAux;
	}
	
	public RepPropuestaPortafolio actualizaPenRec(RebalanceoTO rebaPen,RepPropuestaPortafolio repAux, BigDecimal oTotalPEN){
		repAux.setActuPenDec(Util.isNumber(rebaPen.getSaldoActual()));
		try{
			repAux.setActuPenPesoDec(Util.big(rebaPen.getSaldoActual()).divide(oTotalPEN,2,RoundingMode.HALF_UP).doubleValue());
		}catch(ArithmeticException e){
			repAux.setActuPenPesoDec(0);
		}
		return repAux;	
	}
	
	public RepPropuestaPortafolio actualizaEurRec(RebalanceoTO rebaEur,RepPropuestaPortafolio repAux, BigDecimal oTotalEUR){
		repAux.setActuEurDec(Util.isNumber(rebaEur.getSaldoActual()));
		try{
			repAux.setActuEurPesoDec(Util.big(rebaEur.getSaldoActual()).divide(oTotalEUR,2,RoundingMode.HALF_UP).doubleValue());
		}catch(ArithmeticException e){
			repAux.setActuEurPesoDec(0);
		}
		return repAux;	
	}
	
	public void obtenerList( List listDetallDist,List listDetallRecur){
		RepPropuestaPortafolio repDepEstru=new RepPropuestaPortafolio();
		RepPropuestaPortafolio repDepPlazo=new RepPropuestaPortafolio();//*** Nuevo DPZ	
		RepPropuestaPortafolio repBonosyPapelesC=new RepPropuestaPortafolio();//*** Nuevo Bonos y Papeles Comerciales
		
		/*Para DPZ ESTRUCTURADO (NUEVO)*/
		double actualUsd=0;
		double actualRentUsd= 0;
		double actualPen=0;
		double actualRentPen= 0;
		double actualEur=0;
		double actualRentEur= 0;
		
		double sugeUsd=0;
		double sugeRentUsd=0;	
		double sugePen= 0;
		double sugeRentPen=0;	
		double sugeEur= 0;
		double sugeRentEur=0;
		
		double sugeSumaUsdPeso=0;
		double actualSumaUsdPeso=0;	
		double sugeSumaPenPeso=0;
		double actualSumaPenPeso=0;	
		double sugeSumaEurPeso=0;
		double actualSumaEurPeso=0;
		
		double sugeRentUsdF=0;
		double actualRentUsdF=0;	
		double sugeRentPenF=0;
		double actualRentPenF=0;	
		double sugeRentEurF=0;
		double actualRentEurF=0;	
		
		/*Para DPZ (NUEVO)*/
		double actualUsdDPZ=0;
		double sugeUsdDPZ=0;
		double actualPenDPZ=0;
		double sugePenDPZ=0;
		double actualEurDPZ=0;
		double sugeEurDPZ=0;
		
		double sugeRentUsdDPZ=0;
		double actualRentUsdDPZ=0;
		double sugeRentPenDPZ=0;
		double actualRentPenDPZ=0;
		double sugeRentEurDPZ=0;
		double actualRentEurDPZ=0;
		
		double actualSumaUsdPesoDPZ=0;
		double sugeSumaUsdPesoDPZ=0;
		double actualSumaPenPesoDPZ=0;
		double sugeSumaPenPesoDPZ=0;
		double actualSumaEurPesoDPZ=0;
		double sugeSumaEurPesoDPZ=0;
		
		double sugeRentUsdFDPZ=0;
		double actualRentUsdFDPZ=0;	
		double sugeRentPenFDPZ=0;
		double actualRentPenFDPZ=0;	
		double sugeRentEurFDPZ=0;
		double actualRentEurFDPZ=0;
		
		/*Para BONOS (NUEVO)*/		
		double actualUsdBONO=0;
		double actualRentUsdBONO= 0;
		double actualPenBONO=0;
		double actualRentPenBONO= 0;
		double actualEurBONO=0;
		double actualRentEurBONO= 0;
		
		double sugeUsdBONO=0;
		double sugeRentUsdBONO=0;	
		double sugePenBONO= 0;
		double sugeRentPenBONO=0;	
		double sugeEurBONO= 0;
		double sugeRentEurBONO=0;
		
		double sugeSumaUsdPesoBONO=0;
		double actualSumaUsdPesoBONO=0;	
		double sugeSumaPenPesoBONO=0;
		double actualSumaPenPesoBONO=0;	
		double sugeSumaEurPesoBONO=0;
		double actualSumaEurPesoBONO=0;
		
		double sugeRentUsdFBONO=0;
		double actualRentUsdFBONO=0;	
		double sugeRentPenFBONO=0;
		double actualRentPenFBONO=0;	
		double sugeRentEurFBONO=0;
		double actualRentEurFBONO=0;	
		
		for(int i=0;i<listDetallDist.size();i++){
			RepPropuestaPortafolio rep=(RepPropuestaPortafolio)listDetallDist.get(i);
			if(rep.getCodReporte()==2){				
				repDepEstru.setDescripcion(rep.getDescPadre());				
				actualUsd=actualUsd+rep.getActuUsdDec();
				sugeUsd=sugeUsd+rep.getSugeUsdDec();			
				actualPen=actualPen+rep.getActuPenDec();
				sugePen=sugePen+rep.getSugePenDec();			
				actualEur=actualEur+rep.getActuEurDec();
				sugeEur=sugeEur+rep.getSugeEurDec();
				
				sugeRentUsd=sugeRentUsd+rep.getSugeUsdRentabDec()*rep.getSugeUsdPesoDec();
				actualRentUsd=actualRentUsd+rep.getActuUsdRentabDec()*rep.getActuUsdPesoDec();			
				sugeRentPen=sugeRentPen+rep.getSugePenRentabDec()*rep.getSugePenPesoDec();
				actualRentPen=actualRentPen+rep.getActuPenRentabDec()*rep.getActuPenPesoDec();			
				sugeRentEur=sugeRentEur+rep.getSugeEurRentabDec()*rep.getSugeEurPesoDec();
				actualRentEur=actualRentEur+rep.getActuEurRentabDec()*rep.getActuEurPesoDec();
				
				actualSumaUsdPeso=actualSumaUsdPeso+rep.getActuUsdPesoDec();
				sugeSumaUsdPeso=sugeSumaUsdPeso+rep.getSugeUsdPesoDec();			
				actualSumaPenPeso=actualSumaPenPeso+rep.getActuPenPesoDec();
				sugeSumaPenPeso=sugeSumaPenPeso+rep.getSugePenPesoDec();			
				actualSumaEurPeso=actualSumaEurPeso+rep.getActuEurPesoDec();
				sugeSumaEurPeso=sugeSumaEurPeso+rep.getSugeEurPesoDec();
			}
			if(rep.getCodReporte()==1){//DPZ   (nuevo)			
				repDepPlazo.setDescripcion(rep.getDescPadre());
				
				actualUsdDPZ=actualUsdDPZ+rep.getActuUsdDec();
				sugeUsdDPZ=sugeUsdDPZ+rep.getSugeUsdDec();			
				actualPenDPZ=actualPenDPZ+rep.getActuPenDec();
				sugePenDPZ=sugePenDPZ+rep.getSugePenDec();			
				actualEurDPZ=actualEurDPZ+rep.getActuEurDec();
				sugeEurDPZ=sugeEurDPZ+rep.getSugeEurDec();
				
				sugeRentUsdDPZ=sugeRentUsdDPZ+rep.getSugeUsdRentabDec()*rep.getSugeUsdPesoDec();
				actualRentUsdDPZ=actualRentUsdDPZ+rep.getActuUsdRentabDec()*rep.getActuUsdPesoDec();			
				sugeRentPenDPZ=sugeRentPenDPZ+rep.getSugePenRentabDec()*rep.getSugePenPesoDec();
				actualRentPenDPZ=actualRentPenDPZ+rep.getActuPenRentabDec()*rep.getActuPenPesoDec();			
				sugeRentEurDPZ=sugeRentEurDPZ+rep.getSugeEurRentabDec()*rep.getSugeEurPesoDec();
				actualRentEurDPZ=actualRentEurDPZ+rep.getActuEurRentabDec()*rep.getActuEurPesoDec();
				
				actualSumaUsdPesoDPZ=actualSumaUsdPesoDPZ+rep.getActuUsdPesoDec();
				sugeSumaUsdPesoDPZ=sugeSumaUsdPesoDPZ+rep.getSugeUsdPesoDec();			
				actualSumaPenPesoDPZ=actualSumaPenPesoDPZ+rep.getActuPenPesoDec();
				sugeSumaPenPesoDPZ=sugeSumaPenPesoDPZ+rep.getSugePenPesoDec();			
				actualSumaEurPesoDPZ=actualSumaEurPesoDPZ+rep.getActuEurPesoDec();
				sugeSumaEurPesoDPZ=sugeSumaEurPesoDPZ+rep.getSugeEurPesoDec();
			}
			if(rep.getCodReporte()==4){//BONOS
				repBonosyPapelesC.setDescripcion(rep.getDescPadre());
				
				actualUsdBONO=actualUsdBONO+rep.getActuUsdDec();
				sugeUsdBONO=sugeUsdBONO+rep.getSugeUsdDec();			
				actualPenBONO=actualPenBONO+rep.getActuPenDec();
				sugePenBONO=sugePenBONO+rep.getSugePenDec();			
				actualEurBONO=actualEurBONO+rep.getActuEurDec();
				sugeEurBONO=sugeEurBONO+rep.getSugeEurDec();
				
				sugeRentUsdBONO=sugeRentUsdBONO+rep.getSugeUsdRentabDec()*rep.getSugeUsdPesoDec();
				actualRentUsdBONO=actualRentUsdBONO+rep.getActuUsdRentabDec()*rep.getActuUsdPesoDec();			
				sugeRentPenBONO=sugeRentPenBONO+rep.getSugePenRentabDec()*rep.getSugePenPesoDec();
				actualRentPenBONO=actualRentPenBONO+rep.getActuPenRentabDec()*rep.getActuPenPesoDec();			
				sugeRentEurBONO=sugeRentEurBONO+rep.getSugeEurRentabDec()*rep.getSugeEurPesoDec();
				actualRentEurBONO=actualRentEurBONO+rep.getActuEurRentabDec()*rep.getActuEurPesoDec();
				
				actualSumaUsdPesoBONO=actualSumaUsdPesoBONO+rep.getActuUsdPesoDec();
				sugeSumaUsdPesoBONO=sugeSumaUsdPesoBONO+rep.getSugeUsdPesoDec();			
				actualSumaPenPesoBONO=actualSumaPenPesoBONO+rep.getActuPenPesoDec();
				sugeSumaPenPesoBONO=sugeSumaPenPesoBONO+rep.getSugePenPesoDec();			
				actualSumaEurPesoBONO=actualSumaEurPesoBONO+rep.getActuEurPesoDec();
				sugeSumaEurPesoBONO=sugeSumaEurPesoBONO+rep.getSugeEurPesoDec();
			}
		}
		/*Para DPZ ESTRUCTURADO (NUEVO)*/
		if(actualSumaUsdPeso!=0){
			actualRentUsdF=actualRentUsd/actualSumaUsdPeso;
		}	
		if(actualSumaPenPeso!=0){
			actualRentPenF=actualRentPen/actualSumaPenPeso;
		}	
		if(actualSumaEurPeso!=0){
			actualRentEurF=actualRentEur/actualSumaEurPeso;
		}	
		if(sugeSumaUsdPeso!=0){
			sugeRentUsdF=sugeRentUsd/sugeSumaUsdPeso;
		}
		if(sugeSumaPenPeso!=0){
			sugeRentPenF=sugeRentPen/sugeSumaPenPeso;
		}
		if(sugeSumaEurPeso!=0){
			sugeRentEurF=sugeRentEur/sugeSumaEurPeso;
		}	
		repDepEstru.setActuUsd(Util.formatDouble(actualUsd));
		repDepEstru.setActuUsdRentab(Util.formatDouble(actualRentUsdF));
		repDepEstru.setActuPen(Util.formatDouble(actualPen));
		repDepEstru.setActuPenRentab(Util.formatDouble(actualRentPenF));
		repDepEstru.setActuEur(Util.formatDouble(actualEur));
		repDepEstru.setActuEurRentab(Util.formatDouble(actualRentEurF));
		repDepEstru.setSugeUsd(Util.formatDouble(sugeUsd));
		repDepEstru.setSugeUsdRentab(Util.formatDouble(sugeRentUsdF));
		repDepEstru.setSugePen(Util.formatDouble(sugePen));
		repDepEstru.setSugePenRentab(Util.formatDouble(sugeRentPenF));
		repDepEstru.setSugeEur(Util.formatDouble(sugeEur));
		repDepEstru.setSugeEurRentab(Util.formatDouble(sugeRentEurF));
		
		/*Para DPZ (NUEVO)*/
		if(actualSumaUsdPesoDPZ!=0){
			actualRentUsdFDPZ=actualRentUsdDPZ/actualSumaUsdPesoDPZ;
		}	
		if(actualSumaPenPesoDPZ!=0){
			actualRentPenFDPZ=actualRentPenDPZ/actualSumaPenPesoDPZ;
		}	
		if(actualSumaEurPesoDPZ!=0){
			actualRentEurFDPZ=actualRentEurDPZ/actualSumaEurPesoDPZ;
		}	
		if(sugeSumaUsdPesoDPZ!=0){
			sugeRentUsdFDPZ=sugeRentUsdDPZ/sugeSumaUsdPesoDPZ;
		}
		if(sugeSumaPenPesoDPZ!=0){
			sugeRentPenFDPZ=sugeRentPenDPZ/sugeSumaPenPesoDPZ;
		}
		if(sugeSumaEurPesoDPZ!=0){
			sugeRentEurFDPZ=sugeRentEurDPZ/sugeSumaEurPesoDPZ;
		}	
		repDepPlazo.setActuUsd(Util.formatDouble(actualUsdDPZ));
		repDepPlazo.setActuUsdRentab(Util.formatDouble(actualRentUsdFDPZ));
		repDepPlazo.setActuPen(Util.formatDouble(actualPenDPZ));
		repDepPlazo.setActuPenRentab(Util.formatDouble(actualRentPenFDPZ));
		repDepPlazo.setActuEur(Util.formatDouble(actualEurDPZ));
		repDepPlazo.setActuEurRentab(Util.formatDouble(actualRentEurFDPZ));
		repDepPlazo.setSugeUsd(Util.formatDouble(sugeUsdDPZ));
		repDepPlazo.setSugeUsdRentab(Util.formatDouble(sugeRentUsdFDPZ));
		repDepPlazo.setSugePen(Util.formatDouble(sugePenDPZ));
		repDepPlazo.setSugePenRentab(Util.formatDouble(sugeRentPenFDPZ));
		repDepPlazo.setSugeEur(Util.formatDouble(sugeEurDPZ));
		repDepPlazo.setSugeEurRentab(Util.formatDouble(sugeRentEurFDPZ));
		
		/*Para BONOS (NUEVO)*/
		if(actualSumaUsdPesoBONO!=0){
			actualRentUsdFBONO=actualRentUsdBONO/actualSumaUsdPesoBONO;
		}	
		if(actualSumaPenPesoBONO!=0){
			actualRentPenFBONO=actualRentPenBONO/actualSumaPenPesoBONO;
		}	
		if(actualSumaEurPesoBONO!=0){
			actualRentEurFBONO=actualRentEurBONO/actualSumaEurPesoBONO;
		}	
		if(sugeSumaUsdPesoBONO!=0){
			sugeRentUsdFBONO=sugeRentUsdBONO/sugeSumaUsdPesoBONO;
		}
		if(sugeSumaPenPesoBONO!=0){
			sugeRentPenFBONO=sugeRentPenBONO/sugeSumaPenPesoBONO;
		}
		if(sugeSumaEurPesoBONO!=0){
			sugeRentEurFBONO=sugeRentEurBONO/sugeSumaEurPesoBONO;
		}	
		repBonosyPapelesC.setActuUsd(Util.formatDouble(actualUsdBONO));
		repBonosyPapelesC.setActuUsdRentab(Util.formatDouble(actualRentUsdFBONO));
		repBonosyPapelesC.setActuPen(Util.formatDouble(actualPenBONO));
		repBonosyPapelesC.setActuPenRentab(Util.formatDouble(actualRentPenFBONO));
		repBonosyPapelesC.setActuEur(Util.formatDouble(actualEurBONO));
		repBonosyPapelesC.setActuEurRentab(Util.formatDouble(actualRentEurFBONO));
		repBonosyPapelesC.setSugeUsd(Util.formatDouble(sugeUsdBONO));
		repBonosyPapelesC.setSugeUsdRentab(Util.formatDouble(sugeRentUsdFBONO));
		repBonosyPapelesC.setSugePen(Util.formatDouble(sugePenBONO));
		repBonosyPapelesC.setSugePenRentab(Util.formatDouble(sugeRentPenFBONO));
		repBonosyPapelesC.setSugeEur(Util.formatDouble(sugeEurBONO));
		repBonosyPapelesC.setSugeEurRentab(Util.formatDouble(sugeRentEurFBONO));

		List<RepPropuestaPortafolio> listCabIni= new ArrayList<RepPropuestaPortafolio>();
		List<RepPropuestaPortafolio> listCabFin= new ArrayList<RepPropuestaPortafolio>();
		List<RepPropuestaPortafolio> listCabCuerpo= new ArrayList<RepPropuestaPortafolio>();
		List<RepPropuestaPortafolio> listRecurso= new ArrayList<RepPropuestaPortafolio>();
		RepPropuestaPortafolio repPaso;
		RepPropuestaPortafolio repAux;
		
		for(int i=0;i<listDetallDist.size();i++){
			repAux=(RepPropuestaPortafolio)listDetallDist.get(i);
			
			repPaso=new RepPropuestaPortafolio();
			if(repAux.getCodReporte()==-1 || repAux.getCodReporte()==0){//MODIFICADO PARA CTS LP
				repPaso.setDescripcion(repAux.getDescPadre());
				repPaso=actuRepPropuesta(repPaso,repAux);
				listCabIni.add(repPaso);	
			}
			else if(repAux.getCodReporte()==1){//NUEVO AGREGADO DPZ 
				listCabIni.add(repDepPlazo);	//deposito a plazo, fondos mutuos, bbva soles fmiv
			}
		    else if(repAux.getCodReporte()==2){//MODIFICADO DPZ ESTRUCTURADO
				listCabIni.add(repDepEstru); //deposito estructurado
			}else if(repAux.getCodReporte()==3 && i==4){// MODIFICADO
				repPaso.setDescripcion(repAux.getDescPadre());
				repPaso.setActuUsd("");
				repPaso.setActuUsdRentab("");
				repPaso.setActuPen("");
				repPaso.setActuPenRentab("");
				repPaso.setActuEur("");
				repPaso.setActuEurRentab("");
				repPaso.setSugeUsd("");
				repPaso.setSugeUsdRentab("");
				repPaso.setSugePen("");
				repPaso.setSugePenRentab("");
				repPaso.setSugeEur("");
				repPaso.setSugeEurRentab("");
				listCabIni.add(repPaso);
			} 
			
			if(repAux.getCodReporte()==3){
				repPaso= new RepPropuestaPortafolio();
				repPaso.setDescripcion(repAux.getDescripcion());
				repPaso=actuRepPropuesta(repPaso,repAux);
				listCabCuerpo.add(repPaso);
			}
			
			if(repAux.getCodReporte()==4){//NUEVO
				listCabFin.add(repBonosyPapelesC);
			}
			
			if(repAux.getCodReporte()>4){
				repPaso.setDescripcion(repAux.getDescPadre());
				repPaso=actuRepPropuesta(repPaso,repAux);
				listCabFin.add(repPaso);	
			}
		}
		
		RepPropuestaPortafolio repRecurso;
		for(int i=0;i<listDetallRecur.size();i++){
			RepPropuestaPortafolio rep=(RepPropuestaPortafolio)listDetallRecur.get(i);
			repRecurso=new RepPropuestaPortafolio();
			repRecurso.setDescripcion(rep.getDescripcion());
			repRecurso.setActuUsd(Util.formatDouble(rep.getActuUsdDec()));
			repRecurso.setActuPen(Util.formatDouble(rep.getActuPenDec()));
			repRecurso.setActuEur(Util.formatDouble(rep.getActuEurDec()));
			
			repRecurso.setActuUsdRentab("0.00");
			repRecurso.setActuPenRentab("0.00");
			repRecurso.setActuEurRentab("0.00");
			repRecurso.setSugeUsd("0.00");
			repRecurso.setSugeUsdRentab("0.00");
			repRecurso.setSugeEurRentab("0.00");
			repRecurso.setSugeEur("0.00");
			repRecurso.setSugePen("0.00");
			repRecurso.setSugePenRentab("0.00");
			repRecurso.setSugeEurRentab("0.00");
			listRecurso.add(repRecurso);
		}
		
		this.setListarCabeceraInicio(listCabIni);  //caja, cts, deposito a plazo y estructurado
		this.setListarCabeceraFin(listCabFin); //acciones, op. reporte, opciones, bonos y papeles comerciales
		this.setListarCuerpo(listCabCuerpo);
		this.setListarDetRecurso(listRecurso);
	}
	
	public RepPropuestaPortafolio actuRepPropuesta(RepPropuestaPortafolio repPaso,RepPropuestaPortafolio repAux){
		repPaso.setActuUsd(Util.formatDouble(repAux.getActuUsdDec()));
		repPaso.setActuUsdRentab(Util.formatDouble(repAux.getActuUsdRentabDec()));
		repPaso.setActuPen(Util.formatDouble(repAux.getActuPenDec()));
		repPaso.setActuPenRentab(Util.formatDouble(repAux.getActuPenRentabDec()));
		repPaso.setActuEur(Util.formatDouble(repAux.getActuEurDec()));
		repPaso.setActuEurRentab(Util.formatDouble(repAux.getActuEurRentabDec()));
		repPaso.setSugeUsd(Util.formatDouble(repAux.getSugeUsdDec()));
		repPaso.setSugeUsdRentab(Util.formatDouble(repAux.getSugeUsdRentabDec()));
		repPaso.setSugePen(Util.formatDouble(repAux.getSugePenDec()));
		repPaso.setSugePenRentab(Util.formatDouble(repAux.getSugePenRentabDec()));
		repPaso.setSugeEur(Util.formatDouble(repAux.getSugeEurDec()));
		repPaso.setSugeEurRentab(Util.formatDouble(repAux.getSugeEurRentabDec()));
		return repPaso;
	}
	
	public void obtenerSumaTotal(List listDetallDist,List listDetallRecur){
		double actualUsd=0;
		double actualRentUsd= 0;
		double actualPen=0;
		double actualRentPen= 0;
		double actualEur=0;
		double actualRentEur= 0;
		
		double sugeUsd=0;
		double sugeRentUsd=0;
		double sugePen= 0;
		double sugeRentPen=0;
		double sugeEur= 0;
		double sugeRentEur=0;
		
		double actualSumaUsdPeso=0;
		double actualSumaPenPeso=0;
		double actualSumaEurPeso=0;
	
		double sugeSumaUsdPeso=0;
		double sugeSumaPenPeso=0;
		double sugeSumaEurPeso=0;
		
		double actualRentUsdF=0;
		double actualRentPenF=0;
		double actualRentEurF=0;
		
		double sugeRentUsdF=0;
		double sugeRentPenF=0;
		double sugeRentEurF=0;
		
		double actualUsdF=0;
		double actualPenF=0;
		double actualEurF=0;
		
		double sugeUsdF=0;
		double sugePenF= 0;
		double sugeEurF= 0;
		
		double pondRendAct=0;
		double pondRendSuge=0;
		
		for(int i=0;i<listDetallDist.size();i++){
			RepPropuestaPortafolio rep=(RepPropuestaPortafolio)listDetallDist.get(i);
							
				actualUsd=actualUsd+rep.getActuUsdDec();
				actualPen=actualPen+rep.getActuPenDec();
				actualEur=actualEur+rep.getActuEurDec();
				
				sugeUsd=sugeUsd+rep.getSugeUsdDec();
				sugePen=sugePen+rep.getSugePenDec();
				sugeEur=sugeEur+rep.getSugeEurDec();
				
				sugeRentUsd=sugeRentUsd+rep.getSugeUsdRentabDec()*rep.getSugeUsdPesoDec();
				sugeRentPen=sugeRentPen+rep.getSugePenRentabDec()*rep.getSugePenPesoDec();
				sugeRentEur=sugeRentEur+rep.getSugeEurRentabDec()*rep.getSugeEurPesoDec();
				
				actualRentUsd=actualRentUsd+rep.getActuUsdRentabDec()*rep.getActuUsdPesoDec();
				actualRentPen=actualRentPen+rep.getActuPenRentabDec()*rep.getActuPenPesoDec();
				actualRentEur=actualRentEur+rep.getActuEurRentabDec()*rep.getActuEurPesoDec();
				
				actualSumaUsdPeso=actualSumaUsdPeso+rep.getActuUsdPesoDec();
				actualSumaPenPeso=actualSumaPenPeso+rep.getActuPenPesoDec();
				actualSumaEurPeso=actualSumaEurPeso+rep.getActuEurPesoDec();
				
				sugeSumaUsdPeso=sugeSumaUsdPeso+rep.getSugeUsdPesoDec();
				sugeSumaPenPeso=sugeSumaPenPeso+rep.getSugePenPesoDec();
				sugeSumaEurPeso=sugeSumaEurPeso+rep.getSugeEurPesoDec();
				
			}
		
			for(int i=0;i<listDetallRecur.size();i++){
			
			RepPropuestaPortafolio rep=(RepPropuestaPortafolio)listDetallRecur.get(i);
							
				actualUsd=actualUsd+rep.getActuUsdDec()/**rep.getActuUsdPesoDec()*/;
				actualPen=actualPen+rep.getActuPenDec()/**rep.getActuPenPesoDec()*/;
				actualEur=actualEur+rep.getActuEurDec()/**rep.getActuEurPesoDec()*/;
								
				actualSumaUsdPeso=actualSumaUsdPeso+rep.getActuUsdPesoDec();
				actualSumaPenPeso=actualSumaPenPeso+rep.getActuPenPesoDec();
				actualSumaEurPeso=actualSumaEurPeso+rep.getActuEurPesoDec();
			}
			
			if(actualSumaUsdPeso!=0){
				actualUsdF=actualUsd/*/actualSumaUsdPeso*/;
				actualRentUsdF=actualRentUsd/*/actualSumaUsdPeso*/;
			}
			if(actualSumaPenPeso!=0){
				actualPenF=	actualPen/*/actualSumaPenPeso*/;
				actualRentPenF=actualRentPen/*/actualSumaPenPeso*/;
			}
			if(actualSumaEurPeso!=0){
				actualEurF=	actualEur/*/actualSumaEurPeso*/;
				actualRentEurF=actualRentEur/*/actualSumaEurPeso*/;
			}
			if(sugeSumaUsdPeso!=0){
				sugeUsdF=sugeUsd/*/sugeSumaUsdPeso*/;
				sugeRentUsdF=sugeRentUsd/*/sugeSumaUsdPeso*/;
			}
			if(sugeSumaPenPeso!=0){
				sugePenF=sugePen/*/sugeSumaPenPeso*/;
				sugeRentPenF=sugeRentPen/sugeSumaPenPeso;
			}
			if(sugeSumaEurPeso!=0){
				sugeEurF=sugeEur/*/sugeSumaEurPeso*/;
				sugeRentEurF=sugeRentEur/*/sugeSumaEurPeso*/;
			}
	
			for(RepPropuestaPortafolio fila:this.getListarMonedasV()){
				if(fila.getMonedaAct().equals(Constantes.CONSTANTE_TIPO_MONEDA_EUR)){
					pondRendAct=pondRendAct+Util.big(fila.getPesoAct()).doubleValue()*actualRentEurF/100;
					pondRendSuge=pondRendSuge+Util.big(fila.getPesoSug()).doubleValue()*sugeRentEurF/100;
				}else if(fila.getMonedaAct().equals(Constantes.CONSTANTE_TIPO_MONEDA_PEN)){
					pondRendAct=pondRendAct+Util.big(fila.getPesoAct()).doubleValue()*actualRentPenF/100;
					pondRendSuge=pondRendSuge+Util.big(fila.getPesoSug()).doubleValue()*sugeRentPenF/100;
				}else if(fila.getMonedaAct().equals(Constantes.CONSTANTE_TIPO_MONEDA_USD)){
					pondRendAct=pondRendAct+Util.big(fila.getPesoAct()).doubleValue()*actualRentUsdF/100;
					pondRendSuge=pondRendSuge+Util.big(fila.getPesoSug()).doubleValue()*sugeRentUsdF/100;
				}
			}
			
			Map<String,String> objTotal=new HashMap<String, String>();
			objTotal.put("actualUsdF", Util.formatDouble(actualUsdF));
			objTotal.put("actualRentUsdF", Util.formatDouble(actualRentUsdF));
			
			objTotal.put("actualPenF", Util.formatDouble(actualPenF));
			objTotal.put("actualRentPenF", Util.formatDouble(actualRentPenF));
			
			objTotal.put("actualEurF", Util.formatDouble(actualEurF));
			objTotal.put("actualRentEurF", Util.formatDouble(actualRentEurF));
			
			objTotal.put("sugeUsdF", Util.formatDouble(sugeUsdF));
			objTotal.put("sugeRentUsdF", Util.formatDouble(sugeRentUsdF));
			
			objTotal.put("sugePenF", Util.formatDouble(sugePenF));
			objTotal.put("sugeRentPenF", Util.formatDouble(sugeRentPenF));

			objTotal.put("sugeEurF", Util.formatDouble(sugeEurF));
			objTotal.put("sugeRentEurF", Util.formatDouble(sugeRentEurF));
			
			objTotal.put("pondRendActH", Util.formatDouble(pondRendAct));
			objTotal.put("pondRendSugeH", Util.formatDouble(pondRendSuge));
			
			objTotal.put("pondRendAct", Util.formatDouble(pondRendAct));
			objTotal.put("pondRendSuge", Util.formatDouble(pondRendSuge));
			
			this.setMapaTotal(objTotal);
			
	}
	
	public RepPropuestaPortafolio sumaDepEstructurado(RepPropuestaPortafolio rc,RepPropuestaPortafolio rM,RepPropuestaPortafolio rL){
		return null;
	}
	
	public List<RepPropuestaPortafolio> getListarDetRecurso() {
		return listarDetRecurso;
	}

	public void setListarDetRecurso(List<RepPropuestaPortafolio> listarDetRecurso) {
		this.listarDetRecurso = listarDetRecurso;
	}

	public Map<String, String> getMapaTotal() {
		return mapaTotal;
	}

	public void setMapaTotal(Map<String, String> mapaTotal) {
		this.mapaTotal = mapaTotal;
	}

	public List<RepPropuestaPortafolio> getListarMonedasV() {
		return listarMonedasV;
	}

	public void setListarMonedasV(List<RepPropuestaPortafolio> listarMonedasV) {
		this.listarMonedasV = listarMonedasV;
	}

	public List<RepPropuestaPortafolio> getListarMonedasH() {
		return listarMonedasH;
	}

	public void setListarMonedasH(List<RepPropuestaPortafolio> listarMonedasH) {
		this.listarMonedasH = listarMonedasH;
	}

	public Map<String, String> getMonedaTotal() {
		return monedaTotal;
	}

	public void setMonedaTotal(Map<String, String> monedaTotal) {
		this.monedaTotal = monedaTotal;
	}

	public Map<String, String> getDistCatActivo() {
		return distCatActivo;
	}

	public void setDistCatActivo(Map<String, String> distCatActivo) {
		this.distCatActivo = distCatActivo;
	}

	public List<RepPropuestaPortafolio> getListarPorH() {
		return listarPorH;
	}

	public void setListarPorH(List<RepPropuestaPortafolio> listarPorH) {
		this.listarPorH = listarPorH;
	}

	public List<RepPropuestaPortafolio> getListarPorV() {
		return listarPorV;
	}

	public void setListarPorV(List<RepPropuestaPortafolio> listarPorV) {
		this.listarPorV = listarPorV;
	}

	public String getMonedaSeleccionada() {
		if(monedaSeleccionada==null ||monedaSeleccionada==""){
			return Constantes.CONSTANTE_TIPO_MONEDA_USD;
		}
		return monedaSeleccionada;
	}

	public void setMonedaSeleccionada(String monedaSeleccionada) {
		this.monedaSeleccionada = monedaSeleccionada;
	}
}
